package com.studentbook.service;

import com.studentbook.bean.StudentContact;
import com.studentbook.dao.StudentContactDao;
import com.studentbook.util.FileUtil;

import java.util.List;
import java.util.regex.Pattern;

/**
 * 学生联系人业务逻辑层
 */
public class StudentContactService {
    // 学号和联系方式的正则表达式
    // 学号和联系方式的正则表达式
    private static final Pattern STUDENT_ID_PATTERN = Pattern.compile("^8\\d{7}$");
    private static final Pattern CONTACT_INFO_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");


    private StudentContactDao contactDao = new StudentContactDao();
    // 默认文件路径
    private static final String DEFAULT_FILE_PATH = null; // 使用FileUtil中的默认路径


    /**
     * 添加学生联系人
     * @param contact 学生联系人对象
     * @return 是否添加成功
     */
    public boolean addContact(StudentContact contact) {
        // 验证学号和联系方式
        if (!STUDENT_ID_PATTERN.matcher(contact.getStudentId()).matches()) {
            throw new IllegalArgumentException("学号必须是以8开头的八位数字！");
        }
        if (!CONTACT_INFO_PATTERN.matcher(contact.getContactInfo()).matches()) {
            throw new IllegalArgumentException("联系方式必须是有效的电话号码！");
        }

        // 检查学号是否已存在
        StudentContact existContact = contactDao.findByStudentId(contact.getStudentId());
        if (existContact != null) {
            return false; // 学号已存在，添加失败
        }

        // 添加联系人
        int result = contactDao.add(contact);
        return result > 0;
    }

    /**
     * 根据ID删除学生联系人
     * @param id 联系人ID
     * @return 是否删除成功
     */
    public boolean deleteContactById(int id) {
        int result = contactDao.deleteById(id);
        return result > 0;
    }


    /**
     * 根据学号删除学生联系人
     * @param studentId 学号
     * @return 是否删除成功
     */
    public boolean deleteContactByStudentId(String studentId) {
        int result = contactDao.deleteByStudentId(studentId);
        return result > 0;
    }


    /**
     * 更新学生联系人信息
     * @param contact 学生联系人对象
     * @return 是否更新成功
     */
    public boolean updateContact(StudentContact contact) {
        // 检查学号是否存在
        StudentContact existContact = contactDao.findByStudentId(contact.getStudentId());
        if (existContact == null) {
            return false; // 学号不存在，更新失败
        }

        // 更新联系人信息
        int result = contactDao.update(contact);
        return result > 0;
    }


    /**
     * 根据ID查询学生联系人
     * @param id 联系人ID
     * @return 学生联系人对象
     */
    public StudentContact getContactById(int id) {
        return contactDao.findById(id);
    }


    /**
     * 根据学号查询学生联系人
     * @param studentId 学号
     * @return 学生联系人对象
     */
    public StudentContact getContactByStudentId(String studentId) {
        return contactDao.findByStudentId(studentId);
    }


    /**
     * 根据姓名查询学生联系人
     * @param name 姓名
     * @return 学生联系人列表
     */
    public List<StudentContact> getContactsByName(String name) {
        return contactDao.findByName(name);
    }


    /**
     * 查询所有学生联系人
     * @return 学生联系人列表
     */
    public List<StudentContact> getAllContacts() {
        return contactDao.findAll();
    }


    /**
     * 从文件中加载通讯录信息
     * @param filePath 文件路径，如果为null则使用默认路径
     * @return 通讯录信息列表
     */
    public List<StudentContact> loadContactsFromFile(String filePath) {
        return FileUtil.loadContactsFromFile(filePath);
    }



    /**
     * 将通讯录信息保存到文件中
     * @param filePath 文件路径，如果为null则使用默认路径
     * @return 是否保存成功
     */
    public boolean saveContactsToFile(String filePath) {
        // 获取所有联系人信息
        List<StudentContact> contacts = getAllContacts();
        return FileUtil.saveContactsToFile(contacts, filePath);
    }


    /**
     * 将通讯录信息保存到默认文件中
     * @return 是否保存成功
     */
    public boolean saveContactsToFile() {
        return saveContactsToFile(DEFAULT_FILE_PATH);
    }



    /**
     * 从默认文件中加载通讯录信息
     * @return 通讯录信息列表
     */
    public List<StudentContact> loadContactsFromFile() {
        return loadContactsFromFile(DEFAULT_FILE_PATH);
    }
}
